package leetcode;

import org.w3c.dom.Node;

/**
 * @author Liangyaoyun
 */
public  class MyNode {
    //头结
    //        //将新节点挂在最后一个节点的后面
    //        //让最后一个节点记住新节点的指针
    //        tmp.next=newNode;点
    public Node head;
    //链表长
    public int size;
    //结点类  采用内部类
    private static class Node{
        //值
        public int value;
        // Node 节点类型,引用当前结点的下一个结点
        public Node next;

        //构造方法初始化
        /**
         * @param value 值
         */
        public Node(int value){
            this.value = value;
            next = null;
        }

    }
    //尾插一个节点
    public void add(int val){
        Node newNode=new Node(val);
        if (head==null){
            head=newNode;
            size++;
            return;
        }
        Node tmp=head;
        //如果链表非空
        while(tmp.next!=null){
            tmp=tmp.next;
        }

        size++;
    }
    //根据链表下标来获取链表的值
    public int get(int i)  {
        if(i>=size){
            throw new IllegalArgumentException("链表下标越界"+i);
        }
        //计步器
        int count=0;
        //tmp针对count去下标的节点
        Node tmp=head;
        while (count!=i) {
            tmp = tmp.next;
            count++;
        }
        return tmp.value;
    }
    //将链表下标为i的元素取值更新为参数e的取值
    public void set(int i,int e){
        Node tmp=head;
        int count=0;
        while (count!=i){
            tmp=tmp.next;
            count++;
        }
        tmp.value=e;
    }
    //按下标删除下标为i的链表并作为返回值
    public int removed(int i){
        Node removed=head;
        Node pre=head;
        if (i>=size){
            throw new IllegalArgumentException("链表下标越界："+i);
        }
        int count=0;
        while (count!=i){
            removed=removed.next;
            count++;
        }
        Node newNode=removed.next;
        pre.next=newNode;
        newNode.next=null;
        size--;
        return newNode.value;
    }
    //按下标插入一个节点
    public void insert(int data,int index){

    }
    public int size(){
        return size;
    }

}
